#include<iostream>
#include<string>
#include<vector>
using namespace std;
class Solution{
    public:
    string longestPalindrome(string s){
        int n=s.size();
        if(n==0)
        {
            return"";
        }
        vector<vector<bool>>dp(n,vector<bool>(n,false));
        for(int i=0;i<n;i++)
        {
            dp[i][i]=true;
        }
        int maxlen=1;
        int start=0;
        for(int i=0;i<n-1;i++)
        {
            if(s[i]==s[i+1])
            {
                dp[i][i+1]=true;
                maxlen=2;
                start=i;
            }
        }
            for(int len=3;len<=n;len++)
            {
                for(int i=0;i<=n-len;i++)           //字符串起始位置
                {
                    int j=i+len-1;                  //字符串终止位置
                    if(s[i]==s[j]&&dp[i+1][j-1])
                    {
                        dp[i][j]=true;
                        if(len>maxlen)
                        {
                            maxlen=len;
                            start=i;
                        }
                    }
                }
            }
        return s.substr(start,maxlen);
    }
};
int main()
{
    Solution sol;
    string test = "babad";
    cout << "Longest Palindromic Substring: " << sol.longestPalindrome(test) << endl;
    return 0;
}
